#include <iostream>
#include "string"
#include "Singleton.h"
#include <thread>

using namespace std;

// 定义用来测试的类
class Test {
    SINGLETONV2(Test);
public:
    [[nodiscard]] std::string getData() const {
        return data;
    }

    void setData(const std::string &_data) {
        data = _data;
    }

private:
    std::string data{"just a test"};
};

int main() {
    /// Test *t = new Test;  ///编译器会提示Test的构造函数声明为私有，无法直接new

    ///[1] 以模板和宏结合的方式使用单例模式
    for (int i = 0; i < 10; ++i) {
        cout << &Test::Instance() << endl;// 打印地址
        std::string str(Test::Instance().getData()); // 调用函数
        cout << str << endl;  // 打印输出
        cout << "------------------------" << endl;  // 打印输出
    }

    for (int i = 100; i != 80; --i) {
        cout << &Test::Instance() << endl;// 打印地址
        std::string str(Test::Instance().getData()); // 调用函数
        cout << str << endl;  // 打印输出
        cout << "------------------------" << endl;  // 打印输出
    }

    return 0;
}
